home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 38 / Amiga Format CD38 (1999-03-15)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-04].iso / -seriously_amiga- / programming / other / cyberxxxsrc / misc / stringlib.asm < prev    next >
Assembly Source File  |  1999-02-08  |  8KB  |  382 lines

  1.         SECTION StringLib,CODE
  2.  
  3.         XDEF    _isupper
  4. _isupper
  5. isup_   cmp.b   #'A',d0
  6.         blt.s   1$
  7.         cmp.b   #'Z',d0
  8.         bgt.s   1$
  9.         moveq   #-1,d0
  10.         rts
  11. 1$
  12.         moveq   #0,d0
  13.         rts
  14.  
  15.         XDEF    _islower
  16. _islower
  17. islo_   cmp.b   #'a',d0
  18.         blt.s   1$
  19.         cmp.b   #'z',d0
  20.         bgt.s   1$
  21.         moveq   #-1,d0
  22.         rts
  23. 1$
  24.         moveq   #0,d0
  25.         rts
  26.  
  27.         XDEF    _isalnum
  28. _isalnum
  29.         move.l  d0,d1
  30.         cmp.b   #'0',d1
  31.         blt.s   notalfa
  32.         cmp.b   #'9',d1
  33.         ble.s   isalfa
  34.         bra.s   inalfa
  35.  
  36.         XDEF    _isalpha
  37. _isalpha
  38.         move.l  d0,d1
  39. inalfa  cmpi.b  #'A',d1
  40.         blt.s   notalfa
  41.         cmpi.b  #'Z',d1
  42.         bgt.s   maybealfa
  43. isalfa   moveq   #-1,d0      ;upper case
  44.         rts
  45. maybealfa  cmpi.b  #'a',d1
  46.         blt.s   notalfa
  47.         cmpi.b  #'z',d1
  48.         blt.s   isalfa          ;lower case
  49. notalfa  moveq   #0,d0
  50.         rts
  51.  
  52.         XDEF    _isdigit
  53. _isdigit
  54. isdig_  cmp.b   #'0',d0
  55.         blt.s   1$
  56.         cmp.b   #'9',d0
  57.         bgt.s   1$
  58.         moveq   #-1,d0
  59.         rts
  60. 1$
  61.         moveq   #0,d0
  62.         rts
  63.  
  64.         XDEF    _isspace
  65. _isspace
  66.         cmpi.b   #' ',d0
  67.         beq.s   1$
  68.         cmpi.b   #10,d0
  69.         beq.s   1$
  70.         cmpi.b   #13,d0
  71.         beq.s   1$
  72.         cmpi.b   #9,d0
  73.         beq.s   1$
  74.         cmpi.b   #12,d0
  75.         beq.s   1$
  76.         moveq   #0,d0
  77.         rts
  78. 1$
  79.         moveq     #-1,d0
  80.         rts
  81.  
  82.         XDEF    _toupper
  83. _toupper
  84. toup_   cmpi.b   #'a',d0
  85.         blt.s   1$
  86.         cmpi.b   #'z',d0
  87.         bgt.s   1$
  88.         and.b   #%11011111,d0
  89. 1$      rts
  90.  
  91.         XDEF    _tolower
  92. _tolower
  93. tolo_   cmp.b   #'A',d0
  94.         blt.s   1$
  95.         cmp.b   #'Z',d0
  96.         bgt.s   1$
  97.         or.b    #%00100000,d0
  98. 1$      rts
  99.  
  100.         XDEF    _streq
  101. _streq:
  102. 1$:
  103.         cmpm.b   (a0)+,(a1)+
  104.         bne.s   2$
  105.         tst.b    -1(a1)
  106.         bne     1$
  107.         moveq   #-1,d0
  108.         rts
  109. 2$:
  110.         moveq   #0,d0
  111.         rts
  112.  
  113.           XDEF  _strieq
  114. _strieq   bra.s    instrieq
  115. ieqloop   tst.b    -1(a0)
  116.           beq.s    ieqtrue
  117. instrieq  move.b   (a0)+,d0
  118.           move.b   (a1)+,d1
  119.           sub.b    d0,d1
  120.           beq.s    ieqloop
  121.           cmpi.b   #32,d1
  122.           beq.s    ieqpos32
  123.           cmpi.b   #-32,d1
  124.           beq.s    ieqneg32
  125. ieqfalse  moveq    #0,d0
  126.           rts
  127. ieqpos32  cmpi.b   #'A',d0
  128.           blt.s    ieqfalse
  129.           cmpi.b   #'Z',d0
  130.           bgt.s    ieqfalse
  131.           bra.s    ieqloop
  132. ieqneg32  cmpi.b   #'a',d0
  133.           blt.s    ieqfalse
  134.           cmpi.b   #'z',d0
  135.           bgt.s    ieqfalse
  136.           bra.s    ieqloop
  137. ieqtrue   moveq    #-1,d0
  138.           rts
  139.  
  140.         XDEF    _strneq
  141. _strneq:
  142.         move.l  d0,d1
  143.         subq.w  #1,d1
  144. 1$:
  145.         cmpm.b  (a0)+,(a1)+
  146.         bne.s   2$
  147.         tst.b   -1(a1)
  148.         dbeq     d1,1$
  149. 3$      moveq   #-1,d0
  150.         rts
  151. 2$:
  152.         moveq   #0,d0
  153.         rts
  154.  
  155.           XDEF  _strnieq
  156. _strnieq  move.l   d2,-(sp)
  157.           move.l   d0,d2
  158.           bra.s    instrnieq
  159. nieqloop  tst.b    -1(a0)
  160.           beq.s    nieqtrue
  161.           subq.l   #1,d2
  162.           beq.s    nieqtrue
  163. instrnieq  move.b   (a0)+,d0
  164.           move.b   (a1)+,d1
  165.           sub.b    d0,d1
  166.           beq.s    nieqloop
  167.           cmpi.b   #32,d1
  168.           beq.s    nieqpos32
  169.           cmpi.b   #-32,d1
  170.           beq.s    nieqneg32
  171. nieqfalse  moveq    #0,d0
  172.           rts
  173. nieqpos32  cmpi.b   #'A',d0
  174.           blt.s    nieqfalse
  175.           cmpi.b   #'Z',d0
  176.           bgt.s    nieqfalse
  177.           bra.s    nieqloop
  178. nieqneg32  cmpi.b   #'a',d0
  179.           blt.s    nieqfalse
  180.           cmpi.b   #'z',d0
  181.           bgt.s    nieqfalse
  182.           bra.s    nieqloop
  183. nieqtrue  move.l     (sp)+,d2
  184.           moveq    #-1,d0
  185.           rts
  186.  
  187.         XDEF    _strcmp
  188. _strcmp:
  189. 1$:
  190.         cmpm.b   (a0)+,(a1)+
  191.         bne.s   2$
  192.         tst.b   -1(a0)
  193.         bne.s   1$
  194. 2$      move.b  -1(a1),d0
  195.         sub.b   -1(a0),d0
  196.         ext.w   d0
  197.         ext.l   d0
  198.         rts
  199.  
  200.         XDEF    _stricmp
  201. _stricmp   bra.s    instricmp
  202. icmploop   tst.b    -1(a0)
  203.           beq.s    icmptrue
  204. instricmp  move.b   (a1)+,d0
  205.           move.b   (a0)+,d1
  206.           sub.b    d0,d1
  207.           beq.s    icmploop
  208.           cmpi.b   #32,d1
  209.           beq.s    icmppos32
  210.           cmpi.b   #-32,d1
  211.           beq.s    icmpneg32
  212. icmpfalse  cmpi.b  #'a',d0
  213.           blt.s    notlower1
  214.           cmpi.b   #'z',d0
  215.           bgt.s    notlower1
  216.           andi.b   #%11011111,d0
  217. notlower1 move.b   -1(a0),d1
  218.           cmpi.b   #'a',d1
  219.           blt.s    notlower2
  220.           cmpi.b   #'z',d1
  221.           bgt.s    notlower2
  222.           andi.b   #%11011111,d1
  223. notlower2 sub.b    d1,d0
  224.           ext.w    d0
  225.           ext.l    d0
  226.           rts
  227. icmppos32  cmpi.b   #'A',d0
  228.           blt.s    icmpfalse
  229.           cmpi.b   #'Z',d0
  230.           bgt.s    icmpfalse
  231.           bra.s    icmploop
  232. icmpneg32  cmpi.b   #'a',d0
  233.           blt.s    icmpfalse
  234.           cmpi.b   #'z',d0
  235.           bgt.s    icmpfalse
  236.           bra.s    icmploop
  237. icmptrue   moveq    #0,d0
  238.           rts
  239.  
  240.  
  241.         XDEF    _strncmp
  242. _strncmp:
  243.         move.l  d0,d1
  244.         subq.w  #1,d1
  245. 1$:
  246.         cmpm.b  (a0)+,(a1)+
  247.         bne.s   2$
  248.         tst.b   -1(a0)
  249.         dbeq    d1,1$
  250.         moveq   #0,d0
  251.         rts
  252. 2$      move.b  -1(a1),d0
  253.         sub.b   -1(a0),d0
  254.         ext.w   d0
  255.         ext.l   d0
  256.         rts
  257.  
  258.         XDEF    _strnicmp
  259. _strnicmp:
  260.           move.l   d2,-(sp)
  261.           move.l   d0,d2
  262.           bra.s    instrnicmp
  263. nicmploop   tst.b    -1(a0)
  264.           beq.s    nicmptrue
  265.           subq.l   #1,d2
  266.           beq.s    nicmptrue
  267. instrnicmp  move.b   (a1)+,d0
  268.           move.b   (a0)+,d1
  269.           sub.b    d0,d1
  270.           beq.s    nicmploop
  271.           cmpi.b   #32,d1
  272.           beq.s    nicmppos32
  273.           cmpi.b   #-32,d1
  274.           beq.s    nicmpneg32
  275. nicmpfalse  cmpi.b  #'a',d0
  276.           blt.s    nnotlower1
  277.           cmpi.b   #'z',d0
  278.           bgt.s    nnotlower1
  279.           andi.b   #%11011111,d0
  280. nnotlower1 move.b   -1(a0),d1
  281.           cmpi.b   #'a',d1
  282.           blt.s    nnotlower2
  283.           cmpi.b   #'z',d1
  284.           bgt.s    nnotlower2
  285.           andi.b   #%11011111,d1
  286. nnotlower2 sub.b    d1,d0
  287.           ext.w    d0
  288.           ext.l    d0
  289.           rts
  290. nicmppos32  cmpi.b   #'A',d0
  291.           blt.s    nicmpfalse
  292.           cmpi.b   #'Z',d0
  293.           bgt.s    nicmpfalse
  294.           bra.s    nicmploop
  295. nicmpneg32  cmpi.b   #'a',d0
  296.           blt.s    nicmpfalse
  297.           cmpi.b   #'z',d0
  298.           bgt.s    nicmpfalse
  299.           bra.s    nicmploop
  300. nicmptrue move.l   (sp)+,d2
  301.           moveq    #0,d0
  302.           rts
  303.  
  304.         XDEF    _strlen
  305. _strlen:
  306.          moveq   #-1,d0
  307. _in_strlen
  308.          tst.b   (a0)+
  309.          dbeq    d0,_in_strlen
  310.          not.l   d0
  311.          rts
  312.  
  313.         XDEF    _strcpy
  314. _strcpy
  315. 1$
  316.         move.b  (a0)+,(a1)+
  317.         bne     1$
  318.         rts
  319.  
  320.         XDEF    _strncpy
  321. _strncpy
  322.         move.l  d0,d1
  323.         subq.l  #1,d1
  324. 1$
  325.         move.b  (a0)+,(a1)+
  326.         dbeq    d1,1$
  327.         beq.s   2$
  328.         move.b  #0,(a1)
  329. 2$      rts
  330.  
  331.         XDEF    _strcat
  332. _strcat
  333. 1$      move.b  (a1)+,d0
  334.         bne     1$
  335.         subq.l  #1,a1
  336. 2$
  337.         move.b  (a0)+,(a1)+
  338.         bne     2$
  339.         rts
  340.  
  341.         XDEF    _strncat
  342. _strncat
  343.         move.l  d0,d1
  344.         subq.l  #1,d1
  345. 1$      tst.b   (a1)+
  346.         bne     1$
  347.         subq.l  #1,a1
  348. 2$
  349.         move.b  (a0)+,(a1)+
  350.         dbeq    d1,2$
  351.         beq.s   3$
  352.         move.b  #0,(a1)
  353. 3$      rts
  354.  
  355.         XDEF    _strpos
  356. _strpos
  357.         move.l  d0,d1
  358.         moveq   #-1,d0
  359. 1$      tst.b   (a0)
  360.         beq.s   2$
  361.         cmp.b   (a0)+,d1
  362.         dbeq    d0,1$
  363.         not.l   d0
  364.         rts
  365. 2$      moveq  #-1,d0
  366.         rts
  367.  
  368.  
  369.         XDEF    _strrpos
  370. _strrpos
  371.         move.l  d0,d1
  372.         moveq   #-1,d0
  373. 1$      tst.b   (a0)+
  374.         dbeq    d0,1$
  375.         not.l   d0
  376. 2$      cmp.b   -(a0),d1
  377.         dbeq    d0,2$
  378.         ext.l   d0
  379.         rts
  380.  
  381.     END
  382.